/**
 * @file TextObject.h
 * Declaração da classe TextObject.
 */

#ifndef TEXT_H_
#define TEXT_H_

#include <string>
#include <SDL/SDL_ttf.h>

/**
 * Representa um texto a ser escrito na tela.
 */
class TextObject {

public:

	/**
	 * Construtor.
	 *
	 * @param text A string com o texto a ser escrito.
	 * @param x A coordenada X em que o texto vai aparecer na tela.
	 * @param y A coordenada Y em que o texto vai aparecer na tela.
	 *
	 * Os outros parâmetros do construtor são opcionais.
	 */
	TextObject(const std::string& text, int x, int y,
			int fontSize = 16,
			int style = TTF_STYLE_NORMAL,
			unsigned char red = 0,
			unsigned char green = 0,
			unsigned char blue = 0,
			const std::string& fontFile = "liberation_sans.ttf");

	/**
	 * Destrutor.
	 */
	virtual ~TextObject();

	/**
	 * Renderiza o texto na tela.
	 *
	 * @param screen A tela onde o texto deve aparecer.
	 */
	void render(SDL_Surface* screen);

	/**
	 * Troca a string desse texto.
	 */
	TextObject& setText(const std::string& text) {
		this->text = text;
		return *this;
	}

	/**
	 * Altera a posição desse texto na tela.
	 */
	TextObject& setPos(int x, int y) {
		rect.x = x;
		rect.y = y;
		return *this;
	}

	/**
	 * Retorna o retângulo com o espaço ocupado por esse objeto.
	 */
	const SDL_Rect& getRect() const {
		return rect;
	}

protected:

	/// A string com o texto.
	std::string text;

	/// O modificador de estilo do texto: normal, negrito ou itálico.
	int style;

	/// A fonte a ser usada, obtida de um arquivo de fonte.
	TTF_Font* font;

	/// A cor do texto, em formato RGB.
	SDL_Color color;

	/// A surface desse texto na tela.
	SDL_Surface* surface;

	/// O retângulo com a posição do texto na tela.
	SDL_Rect rect;

};

#endif /* TEXT_H_ */
